Taller de Software Estadístico

Módulo 2

El package ggplot2

  • Sirve para hacer gráficos mucho más elegantes.
  • Implementa el concepto de “gramática de gráficos en capas”.
  • Cuenta con muchas opciones de personalización.
install.packages("ggplot2")
require(ggplot2)

Primero veamos las variables de la base de datos iris:

iris %>% str
'data.frame':   150 obs. of  5 variables:
 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
 $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
 $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
 $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
 $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

Primer gráfico con ggplot2

Los gráficos con ggplot2 suelen tener la siguiente estructura

data <- rio::import(here::here("codigo","datos-sin-procesar", "owid-covid-data.csv"))

# Llamado a la función "ggplot" e indicar base de datos con la información a graficar
ggplot(data = iris) + 
    # Aesthetics: Cómo dibujar los distintos trazos, formas y colores del gráfico, "Bosquejo"
    aes(x = Sepal.Length, y = Petal.Length) + 
    # Geom del gráfico que necesitamos ver (puntos, lineas, barras, etc.)
    geom_point()

Podemos omitir el nombre de los parámetros una vez que tengamos más practica.

ggplot(iris) + 
    aes(Sepal.Length, Petal.Length) + 
    geom_point()

Aesthetics

Acá vamos a indicar que variables van en el gráfico, en conjunto a parámetros adicionales según lo que necesitemos.

  • x: Variable que va en el eje X.
  • y: Variable que va en el eje Y.
  • color: Dentro de las aesthetics significa colorear según una variable categórica.
  • fill: Dentro de las aesthetics significa rellenar de un color según una variable categórica.

Ejemplo:

Hacer un scatter plot de Sepal.Length y Petal.Length que coloree los puntos según Species.

ggplot(data = iris) +
    aes(x = Sepal.Length, y = Petal.Length, color = Species) +
    geom_point()

Geoms

Indica que tipo de gráfico necesitamos ver.

Entre las principales geoms se encuentran:

geom_point()

Es el gráfico de dispersión. Recomendado para identificar visualmente relaciones entre variables.

Ejemplo:

ggplot(data = iris) +
    aes(x = Sepal.Length, y = Petal.Length, color = Species) +
    geom_point()

geom_line()

Es el gráfico de lineas. Recomendado para graficar series de tiempo.

Ejemplo:

require(datasets)
data("economics")
economics %>% str
tibble [574 x 6] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
 $ date    : Date[1:574], format: "1967-07-01" "1967-08-01" ...
 $ pce     : num [1:574] 507 510 516 512 517 ...
 $ pop     : num [1:574] 198712 198911 199113 199311 199498 ...
 $ psavert : num [1:574] 12.6 12.6 11.9 12.9 12.8 11.8 11.7 12.3 11.7 12.3 ...
 $ uempmed : num [1:574] 4.5 4.7 4.6 4.9 4.7 4.8 5.1 4.5 4.1 4.6 ...
 $ unemploy: num [1:574] 2944 2945 2958 3143 3066 ...
ggplot(data = economics) +
    aes(x = date, y = unemploy) +
    geom_line()

geom_histogram

Es el histograma. Sirve para ver la distribución de una variable

Ejemplo:

Al ser solo una variable, solo hay que especificar un argumento en aes.

ggplot(data = iris) +
    aes(x = Sepal.Length) +
    geom_histogram()

geom_boxplot

Es el gráfico de caja y bigote. Sirve para ver la dispersión y cuartiles de una variable.

Ejemplo:

Al ser solo una variable, solo hay que especificar un argumento en aes.

ggplot(data = iris) +
    aes(y = Sepal.Length, fill = Species) +
    geom_boxplot()

geom_bar

Es el gráfico de barras. Sirve para ver con longitudes proporcionales a los valores que representan.

Ejemplo:

ggplot(data = iris) +
    aes(x = Species, fill = Species) +
    geom_bar()

Argumentos de un geom:

  • aes(): En caso de querer usar una aesthetic distinta a la usada anteriormente.
  • color: Colorea el gráfico según el color que indiquemos.

Ejemplo:

ggplot(data = economics) +
    aes(x = date, y = unemploy) +
    geom_line(color = "dodgerblue1")

  • fill: Rellena el gráfico según el color que indiquemos.

Ejemplo:

ggplot(data = iris) +
    aes(x = Sepal.Length) +
    geom_histogram(fill = "deepskyblue1")

Podemos añadirle el argumento color para colorear los contornos con otro color:

ggplot(data = iris) +
    aes(x = Sepal.Length) +
    geom_histogram(color = "deepskyblue4", fill = "deepskyblue3")

  • linetype: Para indicar el tipo de linea que necesitamos en el gráfico.

Ejemplo:

ggplot(data = economics) +
    aes(x = date, y = unemploy) +
    geom_line(linetype = "longdash")

  • size: Cambia el tamaño de la geom del gráfico.

Ejemplo:

ggplot(iris) + 
    aes(Sepal.Length, Petal.Length) + 
    geom_point(size = 3)

  • alpha: Añade transparencia a la geom gráfico.

Ejemplo:

Añadir un 50% de transparencia al gráfico.

ggplot(data = iris) +
    aes(x = Sepal.Length) +
    geom_histogram(color = "deepskyblue4", fill = "deepskyblue3", alpha = 0.5)

Labs

Es una capa para indicar las etiquetas de Eje y título en los gráficos.

Ejemplo:

ggplot(data = economics) +
    aes(x = date, y = unemploy) +
    geom_line(color = "brown4", linetype = "solid") +
    labs(x = "Año", y = "Desempleo", title = "Desempleo a través del tiempo", 
         subtitle = "1965 a 2010")

Lims

Es una capa para indicar los límites de los ejes.

Ejemplo.

ggplot(data = iris) +
    aes(x = Sepal.Length, y = Petal.Length, color = Species) +
    geom_point() +
    lims(x = c(6, 8), y = c(4, NA))

Temas

Sirve para establecer un tema de fondo:

Los temas que se pueden usar por defecto con ggplot2 son:

  • theme_gray:
ggplot(data = iris) +
    aes(x = Sepal.Length, y = Petal.Length, color = Species) +
    geom_point() +
    theme_gray()

  • theme_bw:
ggplot(data = iris) +
    aes(x = Sepal.Length, y = Petal.Length, color = Species) +
    geom_point() +
    theme_bw()

  • theme_linedraw:
ggplot(data = iris) +
    aes(x = Sepal.Length, y = Petal.Length, color = Species) +
    geom_point() +
    theme_linedraw()

  • theme_light:
ggplot(data = iris) +
    aes(x = Sepal.Length, y = Petal.Length, color = Species) +
    geom_point() +
    theme_light()

  • theme_dark:
ggplot(data = iris) +
    aes(x = Sepal.Length, y = Petal.Length, color = Species) +
    geom_point() +
    theme_dark()

  • theme_minimal:
ggplot(data = iris) +
    aes(x = Sepal.Length, y = Petal.Length, color = Species) +
    geom_point() +
    theme_minimal()

  • theme_classic:
ggplot(data = iris) +
    aes(x = Sepal.Length, y = Petal.Length, color = Species) +
    geom_point() +
    theme_classic()

  • theme_void:
ggplot(data = iris) +
    aes(x = Sepal.Length, y = Petal.Length, color = Species) +
    geom_point() +
    theme_void()

¡Puedes buscar muchos temas más en internet!

Gráfico ggplot como un objeto

  • Podemos guardar un gráfico ggplot como un objeto de R.
  • Es muy eficiente.

Ejemplos:

1. Distintos Geoms

Guardamos el gráfico como una variable

grafico_Sepal.Length <- ggplot(data = iris) +
    aes(x = Sepal.Length)

Luego construimos los gráficos:

  • Histograma
grafico_Sepal.Length +
    geom_histogram(color = "dodgerblue4", fill = "dodgerblue3", alpha = 0.5) +
    theme_bw()

  • Boxplot
grafico_Sepal.Length +
    geom_boxplot(aes(fill = Species)) +
    coord_flip() + # Voltear ejes
    theme_light()

2. Gráficos interactivos

No funcionan en archivos .pdf. Creamos una variable con el gráfico:

# install.packages("plotly")
# require(plotly)

tiempo_y_desempleo <- ggplot(data = economics) +
    aes(x = date, y = unemploy) +
    geom_line(color = "brown4", linetype = "solid") +
    labs(x = "Año", y = "Desempleo", title = "Desempleo a través del tiempo", 
         subtitle = "1965 a 2010") +
    theme_bw()

Creamos gráfico interactivo:

tiempo_y_desempleo %>% 
    ggplotly

Actividad

Genere un gráfico de lineas para ver la evolución de la cantidad de casos por día en Chile, Argentina y Perú en enero de 2021. ¡Personalizelo a su gusto! Hint: Use dplyr y magrittr.